
#pragma once
#include "InputAction.h"
#include <array>

namespace FlameEngine
{
	const std::array<InputActionKey,255> Win32KeyMapping =
	{
		iak_none,
		iak_leftButton,				//VK_LBUTTON        0x01
		iak_rightButton,			//VK_RBUTTON        0x02
		iak_none,					//VK_CANCEL         0x03
		iak_middleButton,			//VK_MBUTTON        0x04

		iak_xButton1,				//VK_XBUTTON1       0x05
		iak_xButton2,				//VK_XBUTTON2       0x06

		iak_none,					//0x07

		iak_back,					//VK_BACK           0x08
		iak_tab,					//VK_TAB            0x09

		iak_none,					//0x0a
		iak_none,					//0x0b
		
		iak_clear,					//VK_CLEAR          0x0C
		iak_return,					//VK_RETURN         0x0D

		iak_none,					//0x0E
		iak_none,					//0x0F	

		iak_shift,					//VK_SHIFT          0x10
		iak_ctrl,					//VK_CONTROL        0x11
		iak_alt,					//VK_MENU           0x12
		iak_pause,					//VK_PAUSE          0x13
		iak_capsLock,				//VK_CAPITAL        0x14

		iak_none,					//VK_KANA           0x15
		iak_none,					//VK_KANA           0x16
		iak_none,					//VK_JUNJA          0x17
		iak_none,					//VK_FINAL          0x18
		iak_none,					//VK_HANJA          0x19
		iak_none,					//0x1a
		
        iak_escape,					//VK_ESCAPE         0x1B
        
        iak_none,					//VK_CONVERT        0x1C
        iak_none,					//VK_NONCONVERT     0x1D
        iak_none,					//VK_ACCEPT         0x1E
        iak_none,					//VK_MODECHANGE     0x1F

        iak_space,					//VK_SPACE          0x20
        iak_prior,					//VK_PRIOR          0x21
        iak_next,					//VK_NEXT           0x22
        iak_end,					//VK_END            0x23
        iak_home,					//VK_HOME           0x24
        iak_left,					//VK_LEFT           0x25
        iak_up,						//VK_UP             0x26
        iak_right,					//VK_RIGHT          0x27
        iak_down,					//VK_DOWN           0x28
        iak_select,					//VK_SELECT         0x29
        iak_print,					//VK_PRINT          0x2A
        iak_execute,				//VK_EXECUTE        0x2B
        iak_printScreen,			//VK_SNAPSHOT       0x2C
        iak_insert,					//VK_INSERT         0x2D
        iak_delete,					//VK_DELETE         0x2E
        iak_help,					//VK_HELP           0x2F
									
		iak_d0,						//0x30
		iak_d1,						//
		iak_d2,						//
		iak_d3,						//
		iak_d4,						//
		iak_d5,						//
		iak_d6,						//
		iak_d7,						//
		iak_d8,						//
		iak_d9,						//0x39

		iak_none,					//0x3a
		iak_none,					//0x3b
		iak_none,					//0x3c
		iak_none,					//0x3d
		iak_none,					//0x3e
		iak_none,					//0x3f
		iak_none,					//0x40

		iak_a,						//0x41
		iak_b,						//0x42
		iak_c,						//0x43
		iak_d,						//0x44
		iak_e,						//0x45
		iak_f,						//0x46
		iak_g,						//0x47
		iak_h,						//0x48
		iak_i,						//0x49
		iak_j,						//0x4a
		iak_k,						//0x4b
		iak_l,						//0x4c
		iak_m,						//0x4d
		iak_n,						//0x4e
		iak_o,						//0x4f
		iak_p,						//0x50
		iak_q,						//0x51
		iak_r,						//0x52
		iak_s,						//0x53
		iak_t,						//0x54
		iak_u,						//0x55
		iak_v,						//0x56
		iak_w,						//0x57
		iak_x,						//0x58
		iak_y,						//0x59
		iak_z,						//0x5a
		
		iak_leftWindows,			//VK_LWIN           0x5B
		iak_rightWindows,			//VK_RWIN           0x5C
		iak_apps,					//VK_APPS           0x5D

		iak_none,					//0x5e

		iak_sleep,					//VK_SLEEP          0x5F
		iak_numPad0,				//VK_NUMPAD0        0x60
		iak_numPad1,				//VK_NUMPAD1        0x61
		iak_numPad2,				//VK_NUMPAD2        0x62
		iak_numPad3,				//VK_NUMPAD3        0x63
		iak_numPad4,				//VK_NUMPAD4        0x64
		iak_numPad5,				//VK_NUMPAD5        0x65
		iak_numPad6,				//VK_NUMPAD6        0x66
		iak_numPad7,				//VK_NUMPAD7        0x67
		iak_numPad8,				//VK_NUMPAD8        0x68
		iak_numPad9,				//VK_NUMPAD9        0x69

		iak_multiply,				//VK_MULTIPLY       0x6A
		iak_add,					//VK_ADD            0x6B
		iak_separator,				//VK_SEPARATOR      0x6C
		iak_subtract,				//VK_SUBTRACT       0x6D
		iak_decimal,				//VK_DECIMAL        0x6E
		iak_divide,					//VK_DIVIDE         0x6F

		iak_f1,						//VK_F1             0x70
		iak_f2,						//VK_F2             0x71
		iak_f3,						//VK_F3             0x72
		iak_f4,						//VK_F4             0x73
		iak_f5,						//VK_F5             0x74
		iak_f6,						//VK_F6             0x75
		iak_f7,						//VK_F7             0x76
		iak_f8,						//VK_F8             0x77
		iak_f9,						//VK_F9             0x78
		iak_f10,					//VK_F10            0x79
		iak_f11,					//VK_F11            0x7A
		iak_f12,					//VK_F12            0x7B
		iak_f13,					//VK_F13            0x7C
		iak_f14,					//VK_F14            0x7D
		iak_f15,					//VK_F15            0x7E
		iak_f16,					//VK_F16            0x7F
		iak_f17,					//VK_F17            0x80
		iak_f18,					//VK_F18            0x81
		iak_f19,					//VK_F19            0x82
		iak_f20,					//VK_F20            0x83
		iak_f21,					//VK_F21            0x84
		iak_f22,					//VK_F22            0x85
		iak_f23,					//VK_F23            0x86
		iak_f24,					//VK_F24            0x87

		iak_none,					//0x88
		iak_none,					//0x89
		iak_none,					//0x8a
		iak_none,					//0x8b
		iak_none,					//0x8c
		iak_none,					//0x8d
		iak_none,					//0x8e
		iak_none,					//0x8f
		
		iak_numLock,				//VK_NUMLOCK        0x90
		iak_scroll,					//VK_SCROLL         0x91

		iak_none,					//0x92,
		iak_none,					//0x93,
		iak_none,					//0x94,
		iak_none,					//0x95,
		iak_none,					//0x96,
		iak_none,					//0x97,
		iak_none,					//0x98,
		iak_none,					//0x99,
		iak_none,					//0x9a,
		iak_none,					//0x9b,
		iak_none,					//0x9c,
		iak_none,					//0x9d,
		iak_none,					//0x9e,
		iak_none,					//0x9f,
		
		iak_leftShift,				//VK_LSHIFT         0xA0
		iak_rightShift,				//VK_RSHIFT         0xA1
		iak_leftControl,			//VK_LCONTROL       0xA2
		iak_rightControl,			//VK_RCONTROL       0xA3
		iak_leftAlt,				//VK_LMENU          0xA4
		iak_rightAlt,				//VK_RMENU          0xA5

		iak_browserBack,			//VK_BROWSER_BACK        0xA6
		iak_browserForward,			//VK_BROWSER_FORWARD     0xA7
		iak_browserRefresh,			//VK_BROWSER_REFRESH     0xA8
		iak_browserStop,			//VK_BROWSER_STOP        0xA9
		iak_browserSearch,			//VK_BROWSER_SEARCH      0xAA
		iak_browserFavorites,		//VK_BROWSER_FAVORITES   0xAB
		iak_browserHome,			//VK_BROWSER_HOME        0xAC

		iak_volumeMute,				//VK_VOLUME_MUTE         0xAD
		iak_volumeDown,				//VK_VOLUME_DOWN         0xAE
		iak_volumeUp,				//VK_VOLUME_UP           0xAF
		iak_mediaNextTrack,			//VK_MEDIA_NEXT_TRACK    0xB0
		iak_mediaPreviousTrack,		//VK_MEDIA_PREV_TRACK    0xB1
		iak_mediaStop,				//VK_MEDIA_STOP          0xB2
		iak_mediaPlayPause,			//VK_MEDIA_PLAY_PAUSE    0xB3
		iak_launchMail,				//VK_LAUNCH_MAIL         0xB4
		iak_launchMediaSelect,		//VK_LAUNCH_MEDIA_SELECT 0xB5
		iak_launchApplication1,		//VK_LAUNCH_APP1         0xB6
		iak_launchApplication2,		//VK_LAUNCH_APP2         0xB7

		iak_none,					//0xb8
		iak_none,					//0xb9
		
		iak_oem1,					//VK_OEM_1          0xBA
		iak_oemPlus,				//VK_OEM_PLUS		0xBB   
		iak_oemComma,				//VK_OEM_COMMA      0xBC   // ',' any country
		iak_oemMinus,				//VK_OEM_MINUS      0xBD   // '-' any country
		iak_oemPeriod,				//VK_OEM_PERIOD     0xBE   // '.' any country
		iak_oem2,					//VK_OEM_2          0xBF   // '/?' for US
		iak_oem3,					//VK_OEM_3          0xC0   // '`~' for US

		iak_none,		//0xc1
		iak_none,		//0xc2
		iak_none,		//0xc3
		iak_none,		//0xc4
		iak_none,		//0xc5
		iak_none,		//0xc6
		iak_none,		//0xc7
		iak_none,		//0xc8
		iak_none,		//0xc9
		iak_none,		//0xca
		iak_none,		//0xcb
		iak_none,		//0xcc
		iak_none,		//0xcd
		iak_none,		//0xce
		iak_none,		//0xcf

		iak_none,		//0xd0
		iak_none,		//0xd1
		iak_none,		//0xd2
		iak_none,		//0xd3
		iak_none,		//0xd4
		iak_none,		//0xd5
		iak_none,		//0xd6
		iak_none,		//0xd7
	};
}